博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jsp分页技术的实现
阅读量:2063 次
发布时间:2019-04-29

本文共 6786 字,大约阅读时间需要 22 分钟。

这是我们所要的效果

但是怎么用代码实现呢,那摩让我们先来分析一下吧!

第一步分析我们做分页需要什么数据:

我们从两个方向来分析:1 页面方向,2 servlet方向

一 ,页面方向

1 当前页 currPageCode

2  总 页数 totalPage

3一页中的记录数据 datas

二,servlet方向

1 当前页 currPageCode

2  总页数 totalPage

3 每页记录数 pagesize

4 一共多少条记录 totalRecord

5 一页中的记录数据 datas

6当前页第一条记录的行数 currPageBeginIndex

7 url

哦了

那摩我们来写一个JavaBean吧

public class PageBean
{ private int cp;//当前页 private int pc;//可以通过每页记录数和共多少条记录得到 (dt%md ==0 )?dt/md : dt/md+1 一共多少页 private int md;//每页记录数 private List
pd;//页中的记录数据  private int dt;//一共多少条记录 private int cd;//可以通过每页记录是*(当前页数-1) + 1得到,当前页第一条记录的行数 private String url;//为了清楚起见,我就没有粘上我的setget方法}
嗯,有了javabean了,那摩就先让我们写一下servlet吧!

public String findAll(HttpServletRequest request, HttpServletResponse response)			throws ServletException, IOException {						 /*		  * 1 通过页面回传的当前页信息设置当前页		  * 2 设置每页所显示的数据		  * 3 调用servlce的findAll方法获得一共多少条记录及当前页的数据		  * 		  */		 PageBean
pb = new PageBean
(); if(request.getParameter("cp") != null && !request.getParameter("cp").trim().isEmpty()) { int cp = Integer.parseInt(request.getParameter("cp")); pb.setCp(cp); } else { pb.setCp(1); } pb.setMd(10); pb.setPd(service.findAll(pb.getCd(),pb.getMd())); pb.setDt(service.count()); String url = getUrl(request); pb.setUrl(url); request.setAttribute("pb",pb); return "f:list.jsp"; }
嗯,有了数据了,这个方法会转发找list.jsp页面中,我们来看该页的技术点

	

客户列表

客户姓名 性别 生日 手机 邮箱 描述 操作
${customer.cname } ${customer.gender } ${customer.birthday} ${customer.cellphone } ${customer.email } ${customer.description } 编辑 删除
第${requestScope.pb.cp }页/共 ${pb.pc }页
">首页
上一页
<%-- 用来进行中间页码的显示及使用超链接所带来的的问题的解决方案 如何显示页码呢,我们其实只需要两个数据,begin和end就哦了, 我们常见的百度页面有什么特点呢,你可以去看看我就不多说了;下面我给出他的计算公式: 如果总页数<=10(列表长度),那么begin=1,end=总页数 否则 使用公式计算;begin=pc-5, end=pc + 4; 两种特殊情况: 头溢出:当begin<1时,让begin=1 尾溢出:当end>${tp}时,让end=${tp} --%>
${i }
[${i }]
下一页
尾页
哦了多余的话我就不解释了,我想你看过这段代码之后会明白的吧。

那摩接下来让我们来写一个service和dao就算完事了,service我就不说了我们直接来看dao吧

public List
findAll(int index,int length) { String sql = "select * from t_customer limit ?,?"; List
l = null; Object[] p = {index,length}; try { l = queryRunner.query(sql, new BeanListHandler
(Customer.class),p); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return l; }
public int count() {		String sql = "select count(*) from t_customer";		Number n = null;		try {			n = (Number)queryRunner.query(sql, new ScalarHandler());					} catch (SQLException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}		return n.intValue();	}

是滴,全部查找就是这摸简单,只要还是得利用当前行数,和每页记录数

哦了

有人会问我getUrl()方法是什么鬼,还有encoding()方法又是你妈什么?

应为我们是使用get提交的所以会造成乱码,嗯对,我们获取的customer对象他爹都不认识他,我们的encoding方法就是用来进行解码的

//这是其中的一个,其他的属性也如同if(c.getCname() != null && !c.getCname().trim().isEmpty()) {			byte[] b = null;			try {				b = c.getCname().getBytes("iso-8859-1");			} catch (UnsupportedEncodingException e) {				// TODO Auto-generated catch block				e.printStackTrace();			}			String name=null;			try {				name = new String(b,"utf-8");			} catch (UnsupportedEncodingException e) {				// TODO Auto-generated catch block				e.printStackTrace();			}			c.setCname(name);		}

getUrl是用来获取参数路径并去除&cp参数的:

private String getUrl(HttpServletRequest request) {		//String c = request.getContextPath();		String q = request.getQueryString();		String s = request.getServletPath();				if(q != null && !q.trim().isEmpty()) {			if( q.contains("&cp=")) {				int i = q.indexOf("&cp=");				q = q.substring(0, i);			}		}		String url =  s + "?" + q;		return url;	}
哦了,大致的技术点我们就鸡巴说没了,让我们提升点难度,试试多条件查询:

//多条件查询的servlet方法public String query(HttpServletRequest request, HttpServletResponse response)			throws ServletException, IOException {				Customer customer = new Customer();				try {			BeanUtils.populate(customer,request.getParameterMap());		} catch (IllegalAccessException e) {			// TODO Auto-generated catch block			e.printStackTrace();		} catch (InvocationTargetException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}				Customer c = encoding(customer);						PageBean
pb = new PageBean
(); if(request.getParameter("cp") != null && !request.getParameter("cp").trim().isEmpty()) { int cp = Integer.parseInt(request.getParameter("cp")); pb.setCp(cp); } else { pb.setCp(1); } pb.setMd(10); pb.setPd(service.query(customer,pb.getCd(),pb.getMd())); pb.setDt(service.count()); String url = getUrl(request); pb.setUrl(url); request.setAttribute("pb",pb); return "f:list.jsp"; }
多条件查询的dao
public List
query(Customer customer ,int index,int length) { //我们将其参数放入ArrayList中 List
l = new ArrayList(); //我们使用StringBuffer连接我们所需要的条件 StringBuffer sql = new StringBuffer ("select * from t_customer where 1=1 "); if(customer.getCname() != null && !customer.getCname().trim().isEmpty()) { sql.append("and cname=? "); l.add(customer.getCname()); } if(customer.getBirthday() != null && !customer.getBirthday().trim().isEmpty()) { sql.append("and birthday=? "); l.add(customer.getBirthday()); } if(customer.getCellphone() != null && !customer.getCellphone().trim().isEmpty()) { sql.append("and cellphone=? "); l.add(customer.getCellphone()); } if(customer.getDescription() != null && !customer.getDescription().trim().isEmpty()) { sql.append("and description=? "); l.add(customer.getDescription()); } if(customer.getEmail() != null && !customer.getEmail().trim().isEmpty()) { sql.append("and email=? "); l.add(customer.getEmail()); } if(customer.getGender() != null && !customer.getGender().trim().isEmpty()) { sql.append("and gender=? "); l.add(customer.getGender()); } sql.append("limit ?,?"); l.add(index); l.add(length); List
lc= null; try { lc = queryRunner.query(sql.toString(), new BeanListHandler
(Customer.class), l.toArray()); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return lc; }

你可能感兴趣的文章
【教程】ubuntu下安装NFS服务器
查看>>
快速排序
查看>>
打包备份3天
查看>>
正则表达式
查看>>
读书笔记:《HTML5开发手册》Web表单
查看>>
Yslow
查看>>
ExtJS 4 Grids 详解
查看>>
学数答题160904-不等式
查看>>
杭电 2546 饭卡【01背包】
查看>>
CDays -4 可用的首个Python脚本
查看>>
CentOS如何安装linux桌面?
查看>>
线程之实现
查看>>
java几种简单设计模式
查看>>
UVA 12545 Bits Equalizer
查看>>
HTTP请求方法及响应码详解(http get post head)
查看>>
[SHOI2011]双倍回文
查看>>
codesforces 671D Roads in Yusland
查看>>
Java数据库小项目01--实现用户登录注册
查看>>
Speech and Booth Demo in Maker Faire Shenzhen 2018
查看>>
bzoj 1670: [Usaco2006 Oct]Building the Moat护城河的挖掘
查看>>